【Leetcode】【二叉树】相关题目汇总 分析 总结

题目汇总

以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。

目前范围:Leetcode前150题

生成二叉树

递归

递归

动态规划
卡特兰数(组合数学)

递归
较难

遍历二叉树

递归、迭代

递归、迭代

递归、迭代

前中后三种序列,递归都是一样的理解。迭代的话,前后两个可以互相理解。中序需要单独理解。当然我认为可能我还没有理解透彻。

递归、迭代

递归、迭代

递归、迭代

这三题都是层序遍历,没有什么特别大的区别。层序遍历基本都这样,举一反三。

  • Path Sum
    给定一个数和一棵树,求能否有一条路径上所有叶子结点数值加起来等于给定的数

递归

  • Path Sum II
    将根到叶子的路径和为sum的路径都枚举出来。

递归

第二题只不过是第一题得所有可能性保存到一个数组去。

其他题目

递归 DFS

递归 DFS

递归

  • Recover Binary Search Tree
    一颗二叉查找树中的某两个节点被错误的交换了,需要恢复成原来的正确的二叉查找树。

递归

  • Same Tree
    判断两颗二叉树是否完全相同

递归

递归、迭代

上面两题类似

  • Balanced Binary Tree
    判断一颗二叉树是否是“高度”平衡的。
    平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1。

递归

迭代

递归

递归

迭代、递归

二叉树总结

  • leetcode的测试集经常会有[], [0],所以很多题目先要考虑判断是否为空,return None或者return []。

  • 递归和迭代

递归中必有迭代,迭代未必用到递归
(递归(浪费资源反复调用函数)> 迭代)
迭代——《明日边缘》
递归——《盗梦空间》
递归是一个树结构,每个分支都探究到最远,发现无法继续的时候往回走,每个节点只会访问一次
迭代是一个环结构,每次迭代都是一个圈,不会拉掉其中的某一步,然后不断循环,每个节点都会被循环访问

  • 二叉树在python中用法
    root.val是该节点的值。
    root则相当于指向该节点的指针。
    root.left, root.right指向其左右节点的位置